﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Castle.DynamicProxy;
using Castle.Core.Interceptor;

namespace RouterControlTest
{
	/// <summary>
	/// Zusammenfassungsbeschreibung für CastleProxyText
	/// </summary>
	[TestClass]
	public class CastleProxyText
	{
		public CastleProxyText()
		{
			//
			// TODO: Konstruktorlogik hier hinzufügen
			//
		}

		private TestContext testContextInstance;

		/// <summary>
		///Ruft den Textkontext mit Informationen über
		///den aktuellen Testlauf sowie Funktionalität für diesen auf oder legt diese fest.
		///</summary>
		public TestContext TestContext
		{
			get
			{
				return testContextInstance;
			}
			set
			{
				testContextInstance = value;
			}
		}

		#region Zusätzliche Testattribute
		//
		// Sie können beim Schreiben der Tests folgende zusätzliche Attribute verwenden:
		//
		// Verwenden Sie ClassInitialize, um vor Ausführung des ersten Tests in der Klasse Code auszuführen.
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Verwenden Sie ClassCleanup, um nach Ausführung aller Tests in einer Klasse Code auszuführen.
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Mit TestInitialize können Sie vor jedem einzelnen Test Code ausführen. 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Mit TestCleanup können Sie nach jedem einzelnen Test Code ausführen.
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//
		#endregion

		public interface IProxyTest
		{
			string HelloWorld
			{
				get;
			}

			void Test();
		}

		public class TestInterceptor : IInterceptor
		{

			public void Intercept(IInvocation invocation)
			{
				Console.WriteLine(invocation.Method.Name);
			}

		}

		[TestMethod]
		public void TestMethod1()
		{
			var pg = new ProxyGenerator();

			var proxy = pg.CreateInterfaceProxyWithoutTarget<IProxyTest>(new TestInterceptor());

			proxy.Test();

			Console.WriteLine(proxy.HelloWorld);
		}
	}
}
